package com.example.chamberlainserver.config;

import com.example.chamberlainserver.Entry.Role;
import com.example.chamberlainserver.Service.RoleService;
import com.example.chamberlainserver.security.RoleConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 角色数据初始化器
 * 在应用启动时检查并初始化基本角色数据
 */
@Component
@Order(2) // 在其他初始化之后执行
public class RoleDataInitializer implements CommandLineRunner {

    private static final Logger logger = LoggerFactory.getLogger(RoleDataInitializer.class);

    @Autowired
    private RoleService roleService;

    @Override
    public void run(String... args) throws Exception {
        logger.info("检查角色数据...");
        initRoles();
    }

    /**
     * 初始化基本角色数据
     */
    private void initRoles() {
        // 获取所有角色
        List<Role> existingRoles = roleService.getAllRoles();
        
        // 如果角色表为空，则初始化基本角色
        if (existingRoles == null || existingRoles.isEmpty()) {
            logger.info("角色表为空，初始化基本角色数据");
            initBasicRoles();
        } else {
            logger.info("角色表已存在数据，跳过初始化");
        }
    }

    /**
     * 初始化基本角色
     */
    private void initBasicRoles() {
        // 学生角色
        Role studentRole = new Role();
        studentRole.setRoleName("学生");
        studentRole.setRoleCode(RoleConstants.STUDENT);
        studentRole.setDescription("普通学生用户");
        roleService.addRole(studentRole);
        
        // 小管家角色
        Role butlerRole = new Role();
        butlerRole.setRoleName("小管家");
        butlerRole.setRoleCode(RoleConstants.BUTLER);
        butlerRole.setDescription("宿舍小管家");
        roleService.addRole(butlerRole);
        
        // 教师角色
        Role teacherRole = new Role();
        teacherRole.setRoleName("教师");
        teacherRole.setRoleCode(RoleConstants.TEACHER);
        teacherRole.setDescription("教师用户");
        roleService.addRole(teacherRole);
        
        // 管理员角色
        Role adminRole = new Role();
        adminRole.setRoleName("管理员");
        adminRole.setRoleCode(RoleConstants.ADMIN);
        adminRole.setDescription("系统管理员");
        roleService.addRole(adminRole);
        
        logger.info("基本角色数据初始化完成");
    }
}